<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>AmpleHarvest: JsonSchema.php Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">AmpleHarvest
   &#160;<span id="projectnumber">0.0.1</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('_json_schema_8php.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">JsonSchema.php</div>  </div>
</div>
<div class="contents">
<a href="_json_schema_8php.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 &lt;?php
<a name="l00002"></a>00002         <span class="comment">/*</span>
<a name="l00003"></a>00003 <span class="comment">                        </span>
<a name="l00004"></a>00004 <span class="comment">         Copyright (c) 2008, Gradua Networks</span>
<a name="l00005"></a>00005 <span class="comment">         Author: Bruno Prieto Reis</span>
<a name="l00006"></a>00006 <span class="comment">         All rights reserved.</span>
<a name="l00007"></a>00007 <span class="comment">                        </span>
<a name="l00008"></a>00008 <span class="comment">                        </span>
<a name="l00009"></a>00009 <span class="comment">         Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</span>
<a name="l00010"></a>00010 <span class="comment">                        </span>
<a name="l00011"></a>00011 <span class="comment">         * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</span>
<a name="l00012"></a>00012 <span class="comment">         * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</span>
<a name="l00013"></a>00013 <span class="comment">         * Neither the name of the Gradua Networks nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.</span>
<a name="l00014"></a>00014 <span class="comment">                        </span>
<a name="l00015"></a>00015 <span class="comment">         THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00016"></a>00016 <span class="comment">                        </span>
<a name="l00017"></a>00017 <span class="comment">         Usage:</span>
<a name="l00018"></a>00018 <span class="comment">                        </span>
<a name="l00019"></a>00019 <span class="comment">         //this optional check mode may be set so that strings containing doubles or integers are</span>
<a name="l00020"></a>00020 <span class="comment">         //validated ok against a schema defining an integer or a double.</span>
<a name="l00021"></a>00021 <span class="comment">         //JsonSchema::$checkMode = JsonSchema::CHECK_MODE_TYPE_CAST;</span>
<a name="l00022"></a>00022 <span class="comment">                        </span>
<a name="l00023"></a>00023 <span class="comment">         $result = JsonSchema::validate(</span>
<a name="l00024"></a>00024 <span class="comment">         $json,</span>
<a name="l00025"></a>00025 <span class="comment">         $schema</span>
<a name="l00026"></a>00026 <span class="comment">         );</span>
<a name="l00027"></a>00027 <span class="comment">         * */</span>
<a name="l00028"></a>00028 
<a name="l00029"></a><a class="code" href="class_json_schema.html">00029</a>         <span class="keyword">class </span><a class="code" href="class_json_schema.html">JsonSchema</a>
<a name="l00030"></a>00030         {
<a name="l00031"></a>00031 
<a name="l00032"></a><a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">00032</a>                 <span class="keyword">static</span> <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">$errors</a> = array();
<a name="l00033"></a><a class="code" href="class_json_schema.html#a603ec5d6f8eb47810da7ae16954ee248">00033</a>                 <span class="keyword">static</span> <a class="code" href="class_json_schema.html#a603ec5d6f8eb47810da7ae16954ee248">$formatValidator</a>;
<a name="l00034"></a>00034 
<a name="l00035"></a><a class="code" href="class_json_schema.html#a6a8efafc15ce48413e14fd69571f60f7">00035</a>                 <span class="keyword">const</span> <a class="code" href="class_json_schema.html#a6a8efafc15ce48413e14fd69571f60f7">CHECK_MODE_NORMAL</a> = 1;
<a name="l00036"></a><a class="code" href="class_json_schema.html#a12abbfb11249b43f604323d17dbed386">00036</a>                 <span class="keyword">const</span> <a class="code" href="class_json_schema.html#a12abbfb11249b43f604323d17dbed386">CHECK_MODE_TYPE_CAST</a> = 2;
<a name="l00037"></a><a class="code" href="class_json_schema.html#a9457604a7f4518a25fd8edf80ebbd400">00037</a>                 <span class="keyword">public</span> <span class="keyword">static</span> <a class="code" href="class_json_schema.html#a9457604a7f4518a25fd8edf80ebbd400">$checkMode</a> = <a class="code" href="class_json_schema.html#a6a8efafc15ce48413e14fd69571f60f7">self::CHECK_MODE_NORMAL</a>;
<a name="l00038"></a>00038 
<a name="l00052"></a><a class="code" href="class_json_schema.html#ac0d5ae4a5fb0e57d4c3e3f0c820680cf">00052</a>                 <span class="keyword">static</span> <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#ac0d5ae4a5fb0e57d4c3e3f0c820680cf" title="Validates a php object against a schema.">validate</a>($instance, $schema = null, <a class="code" href="class_json_schema.html#a603ec5d6f8eb47810da7ae16954ee248">$formatValidator</a> = null)
<a name="l00053"></a>00053                 {
<a name="l00054"></a>00054                         self::$errors = array();
<a name="l00055"></a>00055                         self::$formatValidator = null;
<a name="l00056"></a>00056 
<a name="l00057"></a>00057                         <span class="keywordflow">if</span> (<a class="code" href="class_json_schema.html#a603ec5d6f8eb47810da7ae16954ee248">$formatValidator</a>)
<a name="l00058"></a>00058                                 self::$formatValidator = <a class="code" href="class_json_schema.html#a603ec5d6f8eb47810da7ae16954ee248">$formatValidator</a>;
<a name="l00059"></a>00059                         $res = <a class="code" href="class_json_schema.html#a5d878e85b6882633ad1d4478677f253a">self::_validate</a>($instance, $schema, <span class="keyword">false</span>);
<a name="l00060"></a>00060                         self::$formatValidator = null;
<a name="l00061"></a>00061                         <span class="keywordflow">return</span> $res;
<a name="l00062"></a>00062                 }
<a name="l00063"></a>00063 
<a name="l00064"></a><a class="code" href="class_json_schema.html#a5d878e85b6882633ad1d4478677f253a">00064</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#a5d878e85b6882633ad1d4478677f253a">_validate</a>($instance, $schema = null, $_changing)
<a name="l00065"></a>00065                 {
<a name="l00066"></a>00066                         <span class="comment">// verify passed schema</span>
<a name="l00067"></a>00067                         <span class="keywordflow">if</span> ($schema)
<a name="l00068"></a>00068                         {
<a name="l00069"></a>00069                                 <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($instance, $schema, <span class="stringliteral">&#39;&#39;</span>, <span class="stringliteral">&#39;&#39;</span>, $_changing);
<a name="l00070"></a>00070                         }
<a name="l00071"></a>00071                         <span class="comment">// verify &quot;inline&quot; schema</span>
<a name="l00072"></a>00072                         $propName = <span class="stringliteral">&#39;$schema&#39;</span>;
<a name="l00073"></a>00073                         <span class="keywordflow">if</span> (!$_changing &amp;&amp; isset($instance-&gt;$propName))
<a name="l00074"></a>00074                         {
<a name="l00075"></a>00075                                 <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($instance, $instance-&gt;$propName, <span class="stringliteral">&#39;&#39;</span>, <span class="stringliteral">&#39;&#39;</span>, $_changing);
<a name="l00076"></a>00076                         }
<a name="l00077"></a>00077                         <span class="comment">// show results</span>
<a name="l00078"></a>00078                         $obj = <span class="keyword">new</span> stdClass();
<a name="l00079"></a>00079                         $obj-&gt;valid = !((boolean) count(self::$errors));
<a name="l00080"></a>00080                         $obj-&gt;errors = <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">self::$errors</a>;
<a name="l00081"></a>00081                         <span class="keywordflow">return</span> $obj;
<a name="l00082"></a>00082                 }
<a name="l00083"></a>00083 
<a name="l00084"></a><a class="code" href="class_json_schema.html#aa3a9b82786e1f89dd9a5eb8ba85a39f4">00084</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#aa3a9b82786e1f89dd9a5eb8ba85a39f4">incrementPath</a>($path, $i)
<a name="l00085"></a>00085                 {
<a name="l00086"></a>00086                         <span class="keywordflow">if</span> ($path !== <span class="stringliteral">&#39;&#39;</span>)
<a name="l00087"></a>00087                         {
<a name="l00088"></a>00088                                 <span class="keywordflow">if</span> (is_int($i))
<a name="l00089"></a>00089                                 {
<a name="l00090"></a>00090                                         $path .= <span class="charliteral">&#39;[&#39;</span> . $i . <span class="charliteral">&#39;]&#39;</span>;
<a name="l00091"></a>00091                                 }
<a name="l00092"></a>00092                                 elseif ($i == <span class="stringliteral">&#39;&#39;</span>)
<a name="l00093"></a>00093                                 {
<a name="l00094"></a>00094                                         $path .= <span class="stringliteral">&#39;&#39;</span>;
<a name="l00095"></a>00095                                 }
<a name="l00096"></a>00096                                 <span class="keywordflow">else</span>
<a name="l00097"></a>00097                                 {
<a name="l00098"></a>00098                                         $path .= <span class="charliteral">&#39;.&#39;</span> . $i;
<a name="l00099"></a>00099                                 }
<a name="l00100"></a>00100                         }
<a name="l00101"></a>00101                         <span class="keywordflow">else</span>
<a name="l00102"></a>00102                         {
<a name="l00103"></a>00103                                 $path = $i;
<a name="l00104"></a>00104                         }
<a name="l00105"></a>00105                         <span class="keywordflow">return</span> $path;
<a name="l00106"></a>00106                 }
<a name="l00107"></a>00107 
<a name="l00108"></a><a class="code" href="class_json_schema.html#ab98c35159157b4edb131b3911e90aa8d">00108</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#ab98c35159157b4edb131b3911e90aa8d">checkArray</a>($value, $schema, $path, $i, $_changing)
<a name="l00109"></a>00109                 {
<a name="l00110"></a>00110                         <span class="comment">//verify items</span>
<a name="l00111"></a>00111                         <span class="keywordflow">if</span> (isset($schema-&gt;items))
<a name="l00112"></a>00112                         {
<a name="l00113"></a>00113                                 <span class="comment">//tuple typing</span>
<a name="l00114"></a>00114                                 <span class="keywordflow">if</span> (is_array($schema-&gt;items))
<a name="l00115"></a>00115                                 {
<a name="l00116"></a>00116                                         <span class="keywordflow">foreach</span> ($value as $k =&gt; $v)
<a name="l00117"></a>00117                                         {
<a name="l00118"></a>00118                                                 <span class="keywordflow">if</span> (array_key_exists($k, $schema-&gt;items))
<a name="l00119"></a>00119                                                 {
<a name="l00120"></a>00120                                                         <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($v, $schema-&gt;items[$k], $path, $k, $_changing);
<a name="l00121"></a>00121                                                 }
<a name="l00122"></a>00122                                                 <span class="keywordflow">else</span>
<a name="l00123"></a>00123                                                 {
<a name="l00124"></a>00124                                                         <span class="comment">// aditional array properties</span>
<a name="l00125"></a>00125                                                         <span class="keywordflow">if</span> (array_key_exists(<span class="stringliteral">&#39;additionalProperties&#39;</span>, $schema))
<a name="l00126"></a>00126                                                         {
<a name="l00127"></a>00127                                                                 <span class="keywordflow">if</span> ($schema-&gt;additionalProperties === <span class="keyword">false</span>)
<a name="l00128"></a>00128                                                                 {
<a name="l00129"></a>00129                                                                         <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path,
<a name="l00130"></a>00130                                                                                 <span class="stringliteral">&#39;The item &#39;</span> . $i . <span class="charliteral">&#39;[&#39;</span> . $k . <span class="stringliteral">&#39;] is not defined in the objTypeDef and the objTypeDef does not allow additional properties&#39;</span>);
<a name="l00131"></a>00131                                                                 }
<a name="l00132"></a>00132                                                                 <span class="keywordflow">else</span>
<a name="l00133"></a>00133                                                                 {
<a name="l00134"></a>00134                                                                         <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($v, $schema-&gt;additionalProperties, $path, $k, $_changing);
<a name="l00135"></a>00135                                                                 }
<a name="l00136"></a>00136                                                         }
<a name="l00137"></a>00137                                                 }
<a name="l00138"></a>00138                                         } <span class="comment">//foreach($value as $k=&gt;$v) {</span>
<a name="l00139"></a>00139                                         <span class="comment">// treat when we have more schema definitions than values</span>
<a name="l00140"></a>00140                                         <span class="keywordflow">for</span> ($k = count($value); $k &lt; count($schema-&gt;items); $k++)
<a name="l00141"></a>00141                                         {
<a name="l00142"></a>00142                                                 <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>(<span class="keyword">new</span> JsonSchemaUndefined(),
<a name="l00143"></a>00143                                                         $schema-&gt;items[$k], $path, $k, $_changing);
<a name="l00144"></a>00144                                         }
<a name="l00145"></a>00145                                 }
<a name="l00146"></a>00146                                 <span class="comment">// just one type definition for the whole array</span>
<a name="l00147"></a>00147                                 <span class="keywordflow">else</span>
<a name="l00148"></a>00148                                 {
<a name="l00149"></a>00149                                         <span class="keywordflow">foreach</span> ($value as $k =&gt; $v)
<a name="l00150"></a>00150                                         {
<a name="l00151"></a>00151                                                 <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($v, $schema-&gt;items, $path, $k, $_changing);
<a name="l00152"></a>00152                                         }
<a name="l00153"></a>00153                                 }
<a name="l00154"></a>00154                         }
<a name="l00155"></a>00155                         <span class="comment">// verify number of array items</span>
<a name="l00156"></a>00156                         <span class="keywordflow">if</span> (isset($schema-&gt;minItems) &amp;&amp; count($value) &lt; $schema-&gt;minItems)
<a name="l00157"></a>00157                         {
<a name="l00158"></a>00158                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;There must be a minimum of &quot;</span> . $schema-&gt;minItems . <span class="stringliteral">&quot; in the array&quot;</span>);
<a name="l00159"></a>00159                         }
<a name="l00160"></a>00160                         <span class="keywordflow">if</span> (isset($schema-&gt;maxItems) &amp;&amp; count($value) &gt; $schema-&gt;maxItems)
<a name="l00161"></a>00161                         {
<a name="l00162"></a>00162                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;There must be a maximum of &quot;</span> . $schema-&gt;maxItems . <span class="stringliteral">&quot; in the array&quot;</span>);
<a name="l00163"></a>00163                         }
<a name="l00164"></a>00164                 }
<a name="l00165"></a>00165 
<a name="l00166"></a><a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">00166</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">checkProp</a>($value, $schema, $path, $i = <span class="stringliteral">&#39;&#39;</span>, $_changing = <span class="keyword">false</span>)
<a name="l00167"></a>00167                 {
<a name="l00168"></a>00168                         <span class="keywordflow">if</span> (!is_object($schema))
<a name="l00169"></a>00169                         {
<a name="l00170"></a>00170                                 <span class="keywordflow">return</span>;
<a name="l00171"></a>00171                         }
<a name="l00172"></a>00172                         $path = <a class="code" href="class_json_schema.html#aa3a9b82786e1f89dd9a5eb8ba85a39f4">self::incrementPath</a>($path, $i);
<a name="l00173"></a>00173                         <span class="comment">// verify readonly</span>
<a name="l00174"></a>00174                         <span class="keywordflow">if</span> ($_changing &amp;&amp; $schema . readonly)
<a name="l00175"></a>00175                         {
<a name="l00176"></a>00176                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&#39;is a readonly field, it can not be changed&#39;</span>);
<a name="l00177"></a>00177                         }
<a name="l00178"></a>00178                         <span class="comment">// I think a schema cant be an array, only the items property</span>
<a name="l00179"></a>00179                         <span class="comment">/*if(is_array($schema)) {</span>
<a name="l00180"></a>00180 <span class="comment">                         if(!is_array($value)) {</span>
<a name="l00181"></a>00181 <span class="comment">                         return array(array(&#39;property&#39;=&gt;$path,&#39;message&#39;=&gt;&#39;An array tuple is required&#39;));</span>
<a name="l00182"></a>00182 <span class="comment">                         }</span>
<a name="l00183"></a>00183 <span class="comment">                         for($a = 0; $a &lt; count($schema); $a++) {</span>
<a name="l00184"></a>00184 <span class="comment">                         self::$errors = array_merge(</span>
<a name="l00185"></a>00185 <span class="comment">                         self::$errors,</span>
<a name="l00186"></a>00186 <span class="comment">                         self::checkProp($value-&gt;$a,$schema-&gt;$a,$path,$i,$_changing)</span>
<a name="l00187"></a>00187 <span class="comment">                         );</span>
<a name="l00188"></a>00188 <span class="comment">                         return self::$errors;</span>
<a name="l00189"></a>00189 <span class="comment">                         }</span>
<a name="l00190"></a>00190 <span class="comment">                         }*/</span>
<a name="l00191"></a>00191                         <span class="comment">// if it extends another schema, it must pass that schema as well</span>
<a name="l00192"></a>00192                         <span class="keywordflow">if</span> (isset($schema-&gt;extends))
<a name="l00193"></a>00193                         {
<a name="l00194"></a>00194                                 <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($value, $schema-&gt;extends, $path, $i, $_changing);
<a name="l00195"></a>00195                         }
<a name="l00196"></a>00196                         <span class="comment">// verify optional values</span>
<a name="l00197"></a>00197                         <span class="keywordflow">if</span> (is_object($value) &amp;&amp; $value instanceOf JsonSchemaUndefined)
<a name="l00198"></a>00198                         {
<a name="l00199"></a>00199                                 <span class="keywordflow">if</span> (isset($schema-&gt;optional) ? !$schema-&gt;optional : <span class="keyword">true</span>)
<a name="l00200"></a>00200                                 {
<a name="l00201"></a>00201                                         <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;is missing and it is not optional&quot;</span>);
<a name="l00202"></a>00202                                 }
<a name="l00203"></a>00203                         }
<a name="l00204"></a>00204                         <span class="comment">// normal verifications</span>
<a name="l00205"></a>00205                         <span class="keywordflow">else</span>
<a name="l00206"></a>00206                         {
<a name="l00207"></a>00207                                 self::$errors = array_merge(self::$errors,
<a name="l00208"></a>00208                                         self::checkType(isset($schema-&gt;type) ? $schema-&gt;type : null, $value, $path));
<a name="l00209"></a>00209                         }
<a name="l00210"></a>00210                         <span class="keywordflow">if</span> (array_key_exists(<span class="stringliteral">&#39;disallow&#39;</span>, $schema))
<a name="l00211"></a>00211                         {
<a name="l00212"></a>00212                                 $errorsBeforeDisallowCheck = <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">self::$errors</a>;
<a name="l00213"></a>00213                                 $response = <a class="code" href="class_json_schema.html#a6254a1138c40ee962b6765cf178ffe1b" title="Take Care: Value is being passed by ref to continue validation with proper format.">self::checkType</a>($schema-&gt;disallow, $value, $path);
<a name="l00214"></a>00214                                 <span class="keywordflow">if</span> ((count($errorsBeforeDisallowCheck) == count(self::$errors)) &amp;&amp; !count($response))
<a name="l00215"></a>00215                                 {
<a name="l00216"></a>00216                                         <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot; disallowed value was matched&quot;</span>);
<a name="l00217"></a>00217                                 }
<a name="l00218"></a>00218                                 <span class="keywordflow">else</span>
<a name="l00219"></a>00219                                 {
<a name="l00220"></a>00220                                         self::$errors = $errorsBeforeDisallowCheck;
<a name="l00221"></a>00221                                 }
<a name="l00222"></a>00222                         }
<a name="l00223"></a>00223                         <span class="comment">//verify the itens on an array and min and max number of items.</span>
<a name="l00224"></a>00224                         <span class="keywordflow">if</span> (is_array($value))
<a name="l00225"></a>00225                         {
<a name="l00226"></a>00226                                 <span class="keywordflow">if</span> (self::$checkMode == self::CHECK_MODE_TYPE_CAST &amp;&amp; $schema-&gt;type == <span class="stringliteral">&#39;object&#39;</span>)
<a name="l00227"></a>00227                                 {
<a name="l00228"></a>00228                                         <a class="code" href="class_json_schema.html#af8b18fea77a037e10c9f77642e0e37d7">self::checkObj</a>($value,
<a name="l00229"></a>00229                                                 $schema-&gt;properties,
<a name="l00230"></a>00230                                                 $path,
<a name="l00231"></a>00231                                                 isset($schema-&gt;additionalProperties) ? $schema-&gt;additionalProperties : null,
<a name="l00232"></a>00232                                                 $_changing);
<a name="l00233"></a>00233                                 }
<a name="l00234"></a>00234                                 <a class="code" href="class_json_schema.html#ab98c35159157b4edb131b3911e90aa8d">self::checkArray</a>($value, $schema, $path, $i, $_changing);
<a name="l00235"></a>00235                         }
<a name="l00236"></a>00236                         elseif (isset($schema-&gt;properties) &amp;&amp; is_object($value))
<a name="l00237"></a>00237                         {
<a name="l00238"></a>00238                                 <a class="code" href="class_json_schema.html#af8b18fea77a037e10c9f77642e0e37d7">self::checkObj</a>($value,
<a name="l00239"></a>00239                                         $schema-&gt;properties,
<a name="l00240"></a>00240                                         $path,
<a name="l00241"></a>00241                                         isset($schema-&gt;additionalProperties) ? $schema-&gt;additionalProperties : null,
<a name="l00242"></a>00242                                         $_changing);
<a name="l00243"></a>00243                         }
<a name="l00244"></a>00244                         <span class="comment">// verify a regex pattern</span>
<a name="l00245"></a>00245                         <span class="keywordflow">if</span> (isset($schema-&gt;pattern) &amp;&amp; is_string($value) &amp;&amp; !preg_match(<span class="charliteral">&#39;/&#39;</span> . $schema-&gt;pattern . <span class="charliteral">&#39;/&#39;</span>, $value))
<a name="l00246"></a>00246                         {
<a name="l00247"></a>00247                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;does not match the regex pattern &quot;</span> . $schema-&gt;pattern);
<a name="l00248"></a>00248                         }
<a name="l00249"></a>00249                         <span class="comment">// verify maxLength, minLength, maximum and minimum values</span>
<a name="l00250"></a>00250                         <span class="keywordflow">if</span> (isset($schema-&gt;maxLength) &amp;&amp; is_string($value) &amp;&amp; (strlen($value) &gt; $schema-&gt;maxLength))
<a name="l00251"></a>00251                         {
<a name="l00252"></a>00252                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;must be at most &quot;</span> . $schema-&gt;maxLength . <span class="stringliteral">&quot; characters long&quot;</span>);
<a name="l00253"></a>00253                         }
<a name="l00254"></a>00254                         <span class="keywordflow">if</span> (isset($schema-&gt;minLength) &amp;&amp; is_string($value) &amp;&amp; strlen($value) &lt; $schema-&gt;minLength)
<a name="l00255"></a>00255                         {
<a name="l00256"></a>00256                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;must be at least &quot;</span> . $schema-&gt;minLength . <span class="stringliteral">&quot; characters long&quot;</span>);
<a name="l00257"></a>00257                         }
<a name="l00258"></a>00258 
<a name="l00259"></a>00259                         <span class="keywordflow">if</span> (isset($schema-&gt;minimum) &amp;&amp; gettype($value) == gettype($schema-&gt;minimum) &amp;&amp; $value &lt; $schema-&gt;minimum
<a name="l00260"></a>00260                         )
<a name="l00261"></a>00261                         {
<a name="l00262"></a>00262                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;must have a minimum value of &quot;</span> . $schema-&gt;minimum);
<a name="l00263"></a>00263                         }
<a name="l00264"></a>00264                         <span class="keywordflow">if</span> (isset($schema-&gt;maximum) &amp;&amp; gettype($value) == gettype($schema-&gt;maximum) &amp;&amp; $value &gt; $schema-&gt;maximum)
<a name="l00265"></a>00265                         {
<a name="l00266"></a>00266                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;must have a maximum value of &quot;</span> . $schema-&gt;maximum);
<a name="l00267"></a>00267                         }
<a name="l00268"></a>00268                         <span class="comment">// verify enum values</span>
<a name="l00269"></a>00269                         <span class="keywordflow">if</span> (isset($schema-&gt;enum))
<a name="l00270"></a>00270                         {
<a name="l00271"></a>00271                                 $found = <span class="keyword">false</span>;
<a name="l00272"></a>00272                                 <span class="keywordflow">foreach</span> ($schema-&gt;enum as $possibleValue)
<a name="l00273"></a>00273                                 {
<a name="l00274"></a>00274                                         <span class="keywordflow">if</span> ($possibleValue == $value)
<a name="l00275"></a>00275                                         {
<a name="l00276"></a>00276                                                 $found = <span class="keyword">true</span>;
<a name="l00277"></a>00277                                                 <span class="keywordflow">break</span>;
<a name="l00278"></a>00278                                         }
<a name="l00279"></a>00279                                 }
<a name="l00280"></a>00280                                 <span class="keywordflow">if</span> (!$found)
<a name="l00281"></a>00281                                 {
<a name="l00282"></a>00282                                         <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;does not have a value in the enumeration &quot;</span> . implode(<span class="stringliteral">&#39;, &#39;</span>, $schema-&gt;enum));
<a name="l00283"></a>00283                                 }
<a name="l00284"></a>00284                         }
<a name="l00285"></a>00285                         <span class="keywordflow">if</span> (isset($schema-&gt;maxDecimal) &amp;&amp; (($value * pow(10, $schema-&gt;maxDecimal)) != (<span class="keywordtype">int</span>) ($value * pow(10, $schema-&gt;maxDecimal))))
<a name="l00286"></a>00286                         {
<a name="l00287"></a>00287                                 <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, <span class="stringliteral">&quot;may only have &quot;</span> . $schema-&gt;maxDecimal . <span class="stringliteral">&quot; digits of decimal places&quot;</span>);
<a name="l00288"></a>00288                         }
<a name="l00289"></a>00289                         <span class="keywordflow">if</span> (isset($schema-&gt;format) &amp;&amp; isset(self::$formatValidator))
<a name="l00290"></a>00290                         {
<a name="l00291"></a>00291                                 $error = self::$formatValidator-&gt;validate($value, $schema-&gt;format);
<a name="l00292"></a>00292                                 <span class="keywordflow">if</span> ($error)
<a name="l00293"></a>00293                                 {
<a name="l00294"></a>00294                                         <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">self::adderror</a>($path, $error);
<a name="l00295"></a>00295                                 }
<a name="l00296"></a>00296                         }
<a name="l00297"></a>00297                 }
<a name="l00298"></a>00298 
<a name="l00299"></a><a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">00299</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#acfdbd24b16deff6ecec87bdfacabe27d">adderror</a>($path, $message)
<a name="l00300"></a>00300                 {
<a name="l00301"></a>00301                         self::$errors[] = array(
<a name="l00302"></a>00302                                 <span class="stringliteral">&#39;property&#39;</span>       =&gt; $path,
<a name="l00303"></a>00303                                 <span class="stringliteral">&#39;message&#39;</span>        =&gt; $message
<a name="l00304"></a>00304                         );
<a name="l00305"></a>00305                 }
<a name="l00306"></a>00306 
<a name="l00311"></a><a class="code" href="class_json_schema.html#a6254a1138c40ee962b6765cf178ffe1b">00311</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#a6254a1138c40ee962b6765cf178ffe1b" title="Take Care: Value is being passed by ref to continue validation with proper format.">checkType</a>($type, &amp;$value, $path)
<a name="l00312"></a>00312                 {
<a name="l00313"></a>00313                         <span class="keywordflow">if</span> ($type)
<a name="l00314"></a>00314                         {
<a name="l00315"></a>00315                                 $wrongType = <span class="keyword">false</span>;
<a name="l00316"></a>00316                                 <span class="keywordflow">if</span> (is_string($type) &amp;&amp; $type !== <span class="stringliteral">&#39;any&#39;</span>)
<a name="l00317"></a>00317                                 {
<a name="l00318"></a>00318                                         <span class="keywordflow">if</span> ($type == <span class="stringliteral">&#39;null&#39;</span>)
<a name="l00319"></a>00319                                         {
<a name="l00320"></a>00320                                                 <span class="keywordflow">if</span> (!is_null($value))
<a name="l00321"></a>00321                                                 {
<a name="l00322"></a>00322                                                         $wrongType = <span class="keyword">true</span>;
<a name="l00323"></a>00323                                                 }
<a name="l00324"></a>00324                                         }
<a name="l00325"></a>00325                                         <span class="keywordflow">else</span>
<a name="l00326"></a>00326                                         {
<a name="l00327"></a>00327                                                 <span class="keywordflow">if</span> ($type == <span class="stringliteral">&#39;number&#39;</span>)
<a name="l00328"></a>00328                                                 {
<a name="l00329"></a>00329                                                         <span class="keywordflow">if</span> (self::$checkMode == self::CHECK_MODE_TYPE_CAST)
<a name="l00330"></a>00330                                                         {
<a name="l00331"></a>00331                                                                 $wrongType = !<a class="code" href="class_json_schema.html#afdb2de6427c3e589c38b24d196726a58" title="Take Care: Value is being passed by ref to continue validation with proper format.">self::checkTypeCast</a>($type, $value);
<a name="l00332"></a>00332                                                         }
<a name="l00333"></a>00333                                                         elseif (!in_array(gettype($value), array(<span class="stringliteral">&#39;integer&#39;</span>, <span class="stringliteral">&#39;double&#39;</span>)))
<a name="l00334"></a>00334                                                         {
<a name="l00335"></a>00335                                                                 $wrongType = <span class="keyword">true</span>;
<a name="l00336"></a>00336                                                         }
<a name="l00337"></a>00337                                                 }
<a name="l00338"></a>00338                                                 <span class="keywordflow">else</span>
<a name="l00339"></a>00339                                                 {
<a name="l00340"></a>00340                                                         <span class="keywordflow">if</span> (self::$checkMode == self::CHECK_MODE_TYPE_CAST &amp;&amp; $type == <span class="stringliteral">&#39;integer&#39;</span>)
<a name="l00341"></a>00341                                                         {
<a name="l00342"></a>00342                                                                 $wrongType = !<a class="code" href="class_json_schema.html#afdb2de6427c3e589c38b24d196726a58" title="Take Care: Value is being passed by ref to continue validation with proper format.">self::checkTypeCast</a>($type, $value);
<a name="l00343"></a>00343                                                         }
<a name="l00344"></a>00344                                                         elseif (self::$checkMode == self::CHECK_MODE_TYPE_CAST &amp;&amp; $type == <span class="stringliteral">&#39;object&#39;</span> &amp;&amp; is_array($value))
<a name="l00345"></a>00345                                                         {
<a name="l00346"></a>00346                                                                 $wrongType = <span class="keyword">false</span>;
<a name="l00347"></a>00347                                                         }
<a name="l00348"></a>00348                                                         elseif ($type !== gettype($value))
<a name="l00349"></a>00349                                                         {
<a name="l00350"></a>00350                                                                 $wrongType = <span class="keyword">true</span>;
<a name="l00351"></a>00351                                                         }
<a name="l00352"></a>00352                                                 }
<a name="l00353"></a>00353                                         }
<a name="l00354"></a>00354                                 }
<a name="l00355"></a>00355                                 <span class="keywordflow">if</span> ($wrongType)
<a name="l00356"></a>00356                                 {
<a name="l00357"></a>00357                                         <span class="keywordflow">return</span> array(
<a name="l00358"></a>00358                                                 array(
<a name="l00359"></a>00359                                                         <span class="stringliteral">&#39;property&#39;</span>       =&gt; $path,
<a name="l00360"></a>00360                                                         <span class="stringliteral">&#39;message&#39;</span>        =&gt; gettype($value) . <span class="stringliteral">&quot; value found, but a &quot;</span> . $type . <span class="stringliteral">&quot; is required &quot;</span>
<a name="l00361"></a>00361                                                 )
<a name="l00362"></a>00362                                         );
<a name="l00363"></a>00363                                 }
<a name="l00364"></a>00364                                 <span class="comment">// Union Types  :: for now, just return the message for the last expected type!!</span>
<a name="l00365"></a>00365                                 <span class="keywordflow">if</span> (is_array($type))
<a name="l00366"></a>00366                                 {
<a name="l00367"></a>00367                                         $validatedOneType = <span class="keyword">false</span>;
<a name="l00368"></a>00368                                         <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">$errors</a> = array();
<a name="l00369"></a>00369                                         <span class="keywordflow">foreach</span> ($type as $tp)
<a name="l00370"></a>00370                                         {
<a name="l00371"></a>00371                                                 $error = <a class="code" href="class_json_schema.html#a6254a1138c40ee962b6765cf178ffe1b" title="Take Care: Value is being passed by ref to continue validation with proper format.">self::checkType</a>($tp, $value, $path);
<a name="l00372"></a>00372                                                 <span class="keywordflow">if</span> (!count($error))
<a name="l00373"></a>00373                                                 {
<a name="l00374"></a>00374                                                         $validatedOneType = <span class="keyword">true</span>;
<a name="l00375"></a>00375                                                         <span class="keywordflow">break</span>;
<a name="l00376"></a>00376                                                 }
<a name="l00377"></a>00377                                                 <span class="keywordflow">else</span>
<a name="l00378"></a>00378                                                 {
<a name="l00379"></a>00379                                                         <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">$errors</a>[] = $error;
<a name="l00380"></a>00380                                                         <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">$errors</a> = $error;
<a name="l00381"></a>00381                                                 }
<a name="l00382"></a>00382                                         }
<a name="l00383"></a>00383                                         <span class="keywordflow">if</span> (!$validatedOneType)
<a name="l00384"></a>00384                                         {
<a name="l00385"></a>00385                                                 <span class="keywordflow">return</span> <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">$errors</a>;
<a name="l00386"></a>00386                                         }
<a name="l00387"></a>00387                                 }
<a name="l00388"></a>00388                                 elseif (is_object($type))
<a name="l00389"></a>00389                                 {
<a name="l00390"></a>00390                                         <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($value, $type, $path);
<a name="l00391"></a>00391                                 }
<a name="l00392"></a>00392                         }
<a name="l00393"></a>00393                         <span class="keywordflow">return</span> array();
<a name="l00394"></a>00394                 }
<a name="l00395"></a>00395 
<a name="l00399"></a><a class="code" href="class_json_schema.html#afdb2de6427c3e589c38b24d196726a58">00399</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#afdb2de6427c3e589c38b24d196726a58" title="Take Care: Value is being passed by ref to continue validation with proper format.">checkTypeCast</a>($type, &amp;$value)
<a name="l00400"></a>00400                 {
<a name="l00401"></a>00401                         <span class="keywordflow">switch</span> ($type)
<a name="l00402"></a>00402                         {
<a name="l00403"></a>00403                                 <span class="keywordflow">case</span> <span class="stringliteral">&#39;integer&#39;</span>:
<a name="l00404"></a>00404                                         $castValue = (integer) $value;
<a name="l00405"></a>00405                                         <span class="keywordflow">break</span>;
<a name="l00406"></a>00406                                 <span class="keywordflow">case</span> <span class="stringliteral">&#39;number&#39;</span>:
<a name="l00407"></a>00407                                         $castValue = (double) $value;
<a name="l00408"></a>00408                                         <span class="keywordflow">break</span>;
<a name="l00409"></a>00409                                 <span class="keywordflow">default</span>:
<a name="l00410"></a>00410                                         trigger_error(<span class="stringliteral">&#39;this method should only be called for the above supported types.&#39;</span>);
<a name="l00411"></a>00411                                         <span class="keywordflow">break</span>;
<a name="l00412"></a>00412                         }
<a name="l00413"></a>00413                         <span class="keywordflow">if</span> ((<span class="keywordtype">string</span>) $value == (<span class="keywordtype">string</span>) $castValue)
<a name="l00414"></a>00414                         {
<a name="l00415"></a>00415                                 $res = <span class="keyword">true</span>;
<a name="l00416"></a>00416                                 $value = $castValue;
<a name="l00417"></a>00417                         }
<a name="l00418"></a>00418                         <span class="keywordflow">else</span>
<a name="l00419"></a>00419                         {
<a name="l00420"></a>00420                                 $res = <span class="keyword">false</span>;
<a name="l00421"></a>00421                         }
<a name="l00422"></a>00422                         <span class="keywordflow">return</span> $res;
<a name="l00423"></a>00423                 }
<a name="l00424"></a>00424 
<a name="l00425"></a><a class="code" href="class_json_schema.html#af8b18fea77a037e10c9f77642e0e37d7">00425</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_json_schema.html#af8b18fea77a037e10c9f77642e0e37d7">checkObj</a>($instance, $objTypeDef, $path, $additionalProp, $_changing)
<a name="l00426"></a>00426                 {
<a name="l00427"></a>00427                         <span class="keywordflow">if</span> ($objTypeDef instanceOf StdClass)
<a name="l00428"></a>00428                         {
<a name="l00429"></a>00429                                 <span class="keywordflow">if</span> (!(($instance instanceOf StdClass) || is_array($instance)))
<a name="l00430"></a>00430                                 {
<a name="l00431"></a>00431                                         self::$errors[] = array(
<a name="l00432"></a>00432                                                 <span class="stringliteral">&#39;property&#39;</span>       =&gt; $path,
<a name="l00433"></a>00433                                                 <span class="stringliteral">&#39;message&#39;</span>        =&gt; <span class="stringliteral">&quot;an object is required&quot;</span>
<a name="l00434"></a>00434                                         );
<a name="l00435"></a>00435                                 }
<a name="l00436"></a>00436                                 <span class="keywordflow">foreach</span> ($objTypeDef as $i =&gt; $value)
<a name="l00437"></a>00437                                 {
<a name="l00438"></a>00438                                         $value = array_key_exists($i, $instance) ? (is_array($instance) ? $instance[$i] : $instance-&gt;$i) : <span class="keyword">new</span> JsonSchemaUndefined();
<a name="l00439"></a>00439                                         $propDef = $objTypeDef-&gt;$i;
<a name="l00440"></a>00440                                         <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($value, $propDef, $path, $i, $_changing);
<a name="l00441"></a>00441                                 }
<a name="l00442"></a>00442                         }
<a name="l00443"></a>00443                         <span class="comment">// additional properties and requires</span>
<a name="l00444"></a>00444                         <span class="keywordflow">foreach</span> ($instance as $i =&gt; $value)
<a name="l00445"></a>00445                         {
<a name="l00446"></a>00446                                 <span class="comment">// verify additional properties, when its not allowed</span>
<a name="l00447"></a>00447                                 <span class="keywordflow">if</span> (!isset($objTypeDef-&gt;$i) &amp;&amp; ($additionalProp === <span class="keyword">false</span>) &amp;&amp; $i !== <span class="stringliteral">&#39;$schema&#39;</span>)
<a name="l00448"></a>00448                                 {
<a name="l00449"></a>00449                                         self::$errors[] = array(
<a name="l00450"></a>00450                                                 <span class="stringliteral">&#39;property&#39;</span>       =&gt; $path,
<a name="l00451"></a>00451                                                 <span class="stringliteral">&#39;message&#39;</span>        =&gt; <span class="stringliteral">&quot;The property &quot;</span> . $i . <span class="stringliteral">&quot; is not defined in the objTypeDef and the objTypeDef does not allow additional properties&quot;</span>
<a name="l00452"></a>00452                                         );
<a name="l00453"></a>00453                                 }
<a name="l00454"></a>00454                                 <span class="comment">// verify requires</span>
<a name="l00455"></a>00455                                 <span class="keywordflow">if</span> ($objTypeDef &amp;&amp; isset($objTypeDef-&gt;$i) &amp;&amp; isset($objTypeDef-&gt;$i-&gt;requires))
<a name="l00456"></a>00456                                 {
<a name="l00457"></a>00457                                         $requires = $objTypeDef-&gt;$i-&gt;requires;
<a name="l00458"></a>00458                                         <span class="keywordflow">if</span> (!array_key_exists($requires, $instance))
<a name="l00459"></a>00459                                         {
<a name="l00460"></a>00460                                                 self::$errors[] = array(
<a name="l00461"></a>00461                                                         <span class="stringliteral">&#39;property&#39;</span>       =&gt; $path,
<a name="l00462"></a>00462                                                         <span class="stringliteral">&#39;message&#39;</span>        =&gt; <span class="stringliteral">&quot;the presence of the property &quot;</span> . $i . <span class="stringliteral">&quot; requires that &quot;</span> . $requires . <span class="stringliteral">&quot; also be present&quot;</span>
<a name="l00463"></a>00463                                                 );
<a name="l00464"></a>00464                                         }
<a name="l00465"></a>00465                                 }
<a name="l00466"></a>00466                                 $value = is_array($instance) ? $instance[$i] : $instance-&gt;$i;
<a name="l00467"></a>00467 
<a name="l00468"></a>00468                                 <span class="comment">// To verify additional properties types.</span>
<a name="l00469"></a>00469                                 <span class="keywordflow">if</span> ($objTypeDef &amp;&amp; is_object($objTypeDef) &amp;&amp; !isset($objTypeDef-&gt;$i))
<a name="l00470"></a>00470                                 {
<a name="l00471"></a>00471                                         <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">self::checkProp</a>($value, $additionalProp, $path, $i);
<a name="l00472"></a>00472                                 }
<a name="l00473"></a>00473                                 <span class="comment">// Verify inner schema definitions                      </span>
<a name="l00474"></a>00474                                 $schemaPropName = <span class="stringliteral">&#39;$schema&#39;</span>;
<a name="l00475"></a>00475                                 <span class="keywordflow">if</span> (!$_changing &amp;&amp; $value &amp;&amp; isset($value-&gt;$schemaPropName))
<a name="l00476"></a>00476                                 {
<a name="l00477"></a>00477                                         self::$errors = array_merge(self::$errors,
<a name="l00478"></a>00478                                                 <a class="code" href="class_json_schema.html#a0738b137ad9368b0c5e122ffa8459396">checkProp</a>($value, $value-&gt;$schemaPropname, $path, $i));
<a name="l00479"></a>00479                                 }
<a name="l00480"></a>00480                         }
<a name="l00481"></a>00481                         <span class="keywordflow">return</span> <a class="code" href="class_json_schema.html#ab24faf4aa647cdcee494fc48524ad4ff">self::$errors</a>;
<a name="l00482"></a>00482                 }
<a name="l00483"></a>00483         }
<a name="l00484"></a>00484 
<a name="l00485"></a><a class="code" href="class_dbg.html">00485</a>         <span class="keyword">class </span><a class="code" href="class_dbg.html">Dbg</a>
<a name="l00486"></a>00486         {
<a name="l00487"></a>00487 
<a name="l00488"></a><a class="code" href="class_dbg.html#a7b06630dd83a1912cca52476a5438f9e">00488</a>                 <span class="keyword">static</span> <span class="keyword">public</span> <a class="code" href="class_dbg.html#a7b06630dd83a1912cca52476a5438f9e">$quietMode</a> = <span class="keyword">false</span>;
<a name="l00489"></a>00489 
<a name="l00490"></a><a class="code" href="class_dbg.html#a28a93c9ecfad45d3390c620fd8e5b430">00490</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_dbg.html#a28a93c9ecfad45d3390c620fd8e5b430">includeJqueryJs</a>()
<a name="l00491"></a>00491                 {
<a name="l00492"></a>00492                         echo <span class="stringliteral">&quot;&lt;script type=&#39;text/javascript&#39; src=&#39;/js/jquery.js&#39;&gt;&lt;/script&gt;&quot;</span>;
<a name="l00493"></a>00493                 }
<a name="l00494"></a>00494 
<a name="l00495"></a><a class="code" href="class_dbg.html#ac669ae9a811f56f4d213c94ed8fe9ffc">00495</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_dbg.html#ac669ae9a811f56f4d213c94ed8fe9ffc">func</a>($print = <span class="keyword">true</span>, $numStackSteps = 1)
<a name="l00496"></a>00496                 {
<a name="l00497"></a>00497                         $ar = debug_backtrace();
<a name="l00498"></a>00498                         $ret = <span class="stringliteral">&#39;&#39;</span>;
<a name="l00499"></a>00499 
<a name="l00500"></a>00500                         <span class="keywordflow">for</span> ($a = $numStackSteps; $a &gt;= 1; $a--)
<a name="l00501"></a>00501                         {
<a name="l00502"></a>00502                                 $line = $ar[$a - 1][<span class="stringliteral">&#39;line&#39;</span>];
<a name="l00503"></a>00503                                 $step = $ar[$a];
<a name="l00504"></a>00504                                 $ret .= str_repeat(<span class="stringliteral">&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;</span>, $a) . <a class="code" href="class_dbg.html#a3074cd12d744125dd42dd767b72f57f4">self::showStep</a>($step, $print, $line);
<a name="l00505"></a>00505                         }
<a name="l00506"></a>00506                         <span class="keywordflow">if</span> ($print &amp;&amp; !self::$quietMode)
<a name="l00507"></a>00507                                 echo $ret;
<a name="l00508"></a>00508                         <span class="keywordflow">return</span> $ret;
<a name="l00509"></a>00509                 }
<a name="l00510"></a>00510 
<a name="l00511"></a><a class="code" href="class_dbg.html#aff8e9490e246caf69dfaf13f512eb652">00511</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_dbg.html#aff8e9490e246caf69dfaf13f512eb652">mark</a>($title, $print = <span class="keyword">true</span>)
<a name="l00512"></a>00512                 {
<a name="l00513"></a>00513                         $ar = debug_backtrace();
<a name="l00514"></a>00514                         $ret = <span class="stringliteral">&#39;&#39;</span>;
<a name="l00515"></a>00515                         $line = $ar[0][<span class="stringliteral">&#39;line&#39;</span>];
<a name="l00516"></a>00516                         $ret = <span class="stringliteral">&quot;[MARK]&quot;</span> . $title . <span class="stringliteral">&#39;(line &#39;</span> . $line . <span class="stringliteral">&#39;)&lt;br/&gt;&#39;</span>;
<a name="l00517"></a>00517                         <span class="keywordflow">if</span> ($print &amp;&amp; !self::$quietMode)
<a name="l00518"></a>00518                                 echo $ret;
<a name="l00519"></a>00519                         <span class="keywordflow">return</span> $ret;
<a name="l00520"></a>00520                 }
<a name="l00521"></a>00521 
<a name="l00522"></a><a class="code" href="class_dbg.html#aeb105adef4fa0921df4a1695e4639b69">00522</a>                 <span class="keyword">static</span> <span class="keyword">function</span> <a class="code" href="class_dbg.html#aeb105adef4fa0921df4a1695e4639b69">object</a>($object, $linkTitle = <span class="stringliteral">&#39;object&#39;</span>, $varDump = <span class="keyword">false</span>, $print = <span class="keyword">true</span>)
<a name="l00523"></a>00523                 {
<a name="l00524"></a>00524                         <span class="keyword">static</span> $divCount = 0;
<a name="l00525"></a>00525                         $divCount++;
<a name="l00526"></a>00526                         $ar = debug_backtrace();
<a name="l00527"></a>00527                         $ret = <span class="stringliteral">&#39;&#39;</span>;
<a name="l00528"></a>00528                         $line = $ar[0][<span class="stringliteral">&#39;line&#39;</span>];
<a name="l00529"></a>00529                         $ret = <span class="stringliteral">&#39;[OBJECT]&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;$(\&#39;#div-obj-&#39;</span> . $divCount . <span class="charliteral">&#39;\&#39;</span>).toggle()<span class="stringliteral">&quot;&gt;&#39; . $linkTitle . &#39;&lt;/a&gt;&#39;;</span>
<a name="l00530"></a>00530 <span class="stringliteral">                        $ret .= &#39;(line &#39; . $line . &#39;)&lt;br/&gt;&#39;;</span>
<a name="l00531"></a>00531 <span class="stringliteral">                        $ret .= &#39;&lt;div id=\&#39;div-obj-&#39; . $divCount . &#39;\&#39; style=&quot;</span>display:none;<span class="stringliteral">&quot;&gt;&#39;;</span>
<a name="l00532"></a>00532 <span class="stringliteral">                        if ($varDump)</span>
<a name="l00533"></a>00533 <span class="stringliteral">                        {</span>
<a name="l00534"></a>00534 <span class="stringliteral">                                ob_start();</span>
<a name="l00535"></a>00535 <span class="stringliteral">                                var_dump($object);</span>
<a name="l00536"></a>00536 <span class="stringliteral">                                $ret .= ob_get_clean();</span>
<a name="l00537"></a>00537 <span class="stringliteral">                        }</span>
<a name="l00538"></a>00538 <span class="stringliteral">                        else</span>
<a name="l00539"></a>00539 <span class="stringliteral">                        {</span>
<a name="l00540"></a>00540 <span class="stringliteral">                                $ret .= print_r($object, true);</span>
<a name="l00541"></a>00541 <span class="stringliteral">                        }</span>
<a name="l00542"></a>00542 <span class="stringliteral">                        $ret .= &#39;&lt;/div&gt;&#39;;</span>
<a name="l00543"></a>00543 <span class="stringliteral">                        if ($print &amp;&amp; !self::$quietMode)</span>
<a name="l00544"></a>00544 <span class="stringliteral">                                echo $ret;</span>
<a name="l00545"></a>00545 <span class="stringliteral">                        return $ret;</span>
<a name="l00546"></a>00546 <span class="stringliteral">                }</span>
<a name="l00547"></a>00547 <span class="stringliteral"></span>
<a name="l00548"></a><a class="code" href="class_dbg.html#a3074cd12d744125dd42dd767b72f57f4">00548</a> <span class="stringliteral">                static function showStep($step, $print, $line)</span>
<a name="l00549"></a>00549 <span class="stringliteral">                {</span>
<a name="l00550"></a>00550 <span class="stringliteral">                        static $divCount = 0;</span>
<a name="l00551"></a>00551 <span class="stringliteral">                        $ret = &#39;[STEP]&#39; . $step[&#39;class&#39;] . $step[&#39;type&#39;] . $step[&#39;function&#39;];</span>
<a name="l00552"></a>00552 <span class="stringliteral">                        if (count($step[&#39;args&#39;]))</span>
<a name="l00553"></a>00553 <span class="stringliteral">                        {</span>
<a name="l00554"></a>00554 <span class="stringliteral">                                $ret .= &#39;(&#39;;</span>
<a name="l00555"></a>00555 <span class="stringliteral">                                $comma = &#39;&#39;;</span>
<a name="l00556"></a>00556 <span class="stringliteral">                                $exp = array();</span>
<a name="l00557"></a>00557 <span class="stringliteral">                                foreach ($step[&#39;args&#39;] as $num =&gt; $arg)</span>
<a name="l00558"></a>00558 <span class="stringliteral">                                {</span>
<a name="l00559"></a>00559 <span class="stringliteral">                                        $divCount++;</span>
<a name="l00560"></a>00560 <span class="stringliteral">                                        if (in_array(gettype($arg), array(&#39;object&#39;, &#39;array&#39;)))</span>
<a name="l00561"></a>00561 <span class="stringliteral">                                        {</span>
<a name="l00562"></a>00562 <span class="stringliteral">                                                if (is_object($arg))</span>
<a name="l00563"></a>00563 <span class="stringliteral">                                                {</span>
<a name="l00564"></a>00564 <span class="stringliteral">                                                        $type = get_class($arg);</span>
<a name="l00565"></a>00565 <span class="stringliteral">                                                }</span>
<a name="l00566"></a>00566 <span class="stringliteral">                                                else</span>
<a name="l00567"></a>00567 <span class="stringliteral">                                                {</span>
<a name="l00568"></a>00568 <span class="stringliteral">                                                        $type = gettype($arg);</span>
<a name="l00569"></a>00569 <span class="stringliteral">                                                }</span>
<a name="l00570"></a>00570 <span class="stringliteral">                                                $argVal = &#39;&lt;a href=&quot;</span>javascript:void(0);<span class="stringliteral">&quot; onclick=&quot;</span>$(\<span class="stringliteral">&#39;#div-step-&#39;</span> . $divCount . <span class="charliteral">&#39;\&#39;</span>).toggle()<span class="stringliteral">&quot;&gt;click to see&lt;/a&gt;&#39;;</span>
<a name="l00571"></a>00571 <span class="stringliteral">                                                $exp[] = &#39;&lt;div id=\&#39;div-step-&#39; . $divCount . &#39;\&#39; style=&quot;</span>display:none;<span class="stringliteral">&quot;&gt;&#39; .</span>
<a name="l00572"></a>00572 <span class="stringliteral">                                                        print_r($arg, true) .</span>
<a name="l00573"></a>00573 <span class="stringliteral">                                                        &#39;&lt;/div&gt;&#39;;</span>
<a name="l00574"></a>00574 <span class="stringliteral">                                        }</span>
<a name="l00575"></a>00575 <span class="stringliteral">                                        else</span>
<a name="l00576"></a>00576 <span class="stringliteral">                                        {</span>
<a name="l00577"></a>00577 <span class="stringliteral">                                                $type = gettype($arg);</span>
<a name="l00578"></a>00578 <span class="stringliteral">                                                if ($type == &#39;string&#39;)</span>
<a name="l00579"></a>00579 <span class="stringliteral">                                                {</span>
<a name="l00580"></a>00580 <span class="stringliteral">                                                        $argVal = &quot;</span><span class="stringliteral">&#39;&quot; . $arg . &quot;&#39;</span><span class="stringliteral">&quot;;</span>
<a name="l00581"></a>00581 <span class="stringliteral">                                                }</span>
<a name="l00582"></a>00582 <span class="stringliteral">                                                else</span>
<a name="l00583"></a>00583 <span class="stringliteral">                                                {</span>
<a name="l00584"></a>00584 <span class="stringliteral">                                                        $argVal = $arg;</span>
<a name="l00585"></a>00585 <span class="stringliteral">                                                }</span>
<a name="l00586"></a>00586 <span class="stringliteral">                                                $argVal = &#39;&lt;font style=&quot;</span>color:#060<span class="stringliteral">&quot;&gt;&#39; . $argVal . &#39;&lt;/font&gt;&#39;;</span>
<a name="l00587"></a>00587 <span class="stringliteral">                                        }</span>
<a name="l00588"></a>00588 <span class="stringliteral">                                        $ret .= $comma . &#39; &lt;i&gt;&#39; . $type . &quot;</span>&lt;/i&gt; <span class="stringliteral">&quot; . $argVal;</span>
<a name="l00589"></a>00589 <span class="stringliteral">                                        $comma = &#39;,&#39;;</span>
<a name="l00590"></a>00590 <span class="stringliteral">                                }</span>
<a name="l00591"></a>00591 <span class="stringliteral">                                $ret .= &#39;)  (line &#39; . $line . &#39;)&lt;br/&gt;&#39;;</span>
<a name="l00592"></a>00592 <span class="stringliteral">                                foreach ($exp as $text)</span>
<a name="l00593"></a>00593 <span class="stringliteral">                                {</span>
<a name="l00594"></a>00594 <span class="stringliteral">                                        $ret .= &#39;&lt;pre&gt;&#39; . $text . &#39;&lt;/pre&gt;&#39;;</span>
<a name="l00595"></a>00595 <span class="stringliteral">                                }</span>
<a name="l00596"></a>00596 <span class="stringliteral">                        }</span>
<a name="l00597"></a>00597 <span class="stringliteral">                        return $ret;</span>
<a name="l00598"></a>00598 <span class="stringliteral">                }</span>
<a name="l00599"></a>00599 <span class="stringliteral">        }</span>
<a name="l00600"></a>00600 <span class="stringliteral">?&gt;</span>
</pre></div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="_json_schema_8php.html">JsonSchema.php</a>      </li>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>


    <li class="footer">Generated on Mon Jan 23 2012 13:34:20 for AmpleHarvest by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
